\chapter{QMetaProperty}

QMetaProperty 类提供了对应一条属性的元数据。更多内容...

\begin{tabular}{|r|l|}
	\hline
	属性 & 方法 \\
	\hline
    头文件  &	\hl{\#include <QMetaProperty>} \\
    \hline
    qmake: & \hl{QT += core}    \\
	\hline
\end{tabular}

\section{公共成员函数}

\begin{longtable}[l]{|r|m{28em}|}   
\hline
返回类型 	& 函数 \\
\hline
QMetaEnum &	enumerator() const \\
\hline 
bool &	hasNotifySignal() const \\ 
\hline
bool &	isConstant() const \\ 
\hline
bool &	isDesignable(const QObject \emph{*object} = nullptr) const \\
\hline
bool &	isEnumType() const \\
\hline
bool 	&isFinal() const \\ 
\hline
bool 	&isFlagType() const \\ 
\hline
bool &	isReadable() const \\ 
\hline
bool &	isRequired() const\\
\hline
bool &	isResettable() const\\
\hline
bool &	isScriptable(const QObject \emph{*object} = nullptr) const\\
\hline
bool 	&isStored(const QObject \emph{*object} = nullptr) const\\
\hline
bool 	&isUser(const QObject \emph{*object} = nullptr) const\\
\hline
bool &	isValid() const\\
\hline
bool 	&isWritable() const\\
\hline
const char * &	name() const\\
\hline
QMetaMethod &	notifySignal() const\\
\hline
int 	& notifySignalIndex() const\\
\hline
int  &	propertyIndex() const\\
\hline
QVariant &	read(const QObject \emph{*object}) const \\
\hline
QVariant 	&readOnGadget(const void \emph{*gadget}) const \\
\hline
int 	&relativePropertyIndex() const\\
\hline
bool &	reset(QObject \emph{*object}) const\\
\hline
bool 	&resetOnGadget(void \emph{*gadget}) const \\
\hline
int 	&revision() const\\
\hline
QVariant::Type &	type() const \\
\hline
const char * &	typeName() const \\ 
\hline
int 	& userType() const \\ 
\hline
bool &	write(QObject \emph{*object}, const QVariant \emph{\&value}) const \\ 
\hline
bool 	&writeOnGadget(void \emph{*gadget}, const QVariant \emph{\&value}) const \\ 
\hline
\end{longtable}


\section{详细描述}

属性元数据可通过对象的元对象获取。详见 QMetaObject::property() 和 QMetaObject::propertyCount()。

\subsection{属性元数据}

属性具有 name() 和 type()，并且有不同的成员来表示其外在表现: isReadable()、isWritable()、isDesignable()、
isScriptable()、revision() 和 isStored()。

若该属性是枚举变量，则 isEnumType() 返回 true；
若该属性是枚举，同时也是标志位（即可通过或运算合并多个值），
则 isEnumType() 和 isFlagType() 都返回 true。这些类型的枚举值可以通过 enumerator() 查询。

属性的值通过 read()、write() 和 reset()来获取或设置，也可以通过 QObject 的 get 和 set 函数来操作，
详见 QObject::setProperty() 和 QObject::property()。

\subsection{拷贝与赋值}

QMetaProperty 对象可以通过传值方式拷贝，与此同时，每份副本内部都会指向相同的属性元数据。

\begin{seeAlso}
QMetaObject，QMetaEnum，QMetaMethod 和 Qt 属性系统。
\end{seeAlso}

\section{成员函数文档}

QMetaEnum QMetaProperty::enumerator() const

若该属性是枚举类型，则返回对应的枚举器，否则返回未定义值。

\begin{seeAlso}
isEnumType() 和 isFlagType()。
\end{seeAlso}

bool QMetaProperty::hasNotifySignal() const

若该属性有对应的通知信号则返回 true，否则返回 false。

\begin{seeAlso}
notifySignal()。
\end{seeAlso}

bool QMetaProperty::isConstant() const

若该属性在 Q\_PROPERTY() 中被标记为 CONSTANT 则返回 true，否则返回 false。

本函数在 Qt 4.6 中被引入。

bool QMetaProperty::isDesignable(const QObject \emph{*object} = nullptr) const

若该属性可被设计师(Qt Designer)编辑则返回 true，否则返回 false。

若 object 未被指定，则当 Q\_PROPERTY() 的 DESIGNABLE 标记被指定为 false时，此函数返回 false ；其它情况下返回 true（若该标记被指定为 true，或指定为某个函数，或指定为表达式）。

\begin{seeAlso}
isScriptable() 和 isStored()。
\end{seeAlso}

bool QMetaProperty::isEnumType() const

若该属性是枚举类型则返回 true，否则返回 false。

\begin{seeAlso}
enumerator() 和 isFlagType()。
\end{seeAlso}

bool QMetaProperty::isFinal() const

若该属性在 Q\_PROPERTY() 中被标记为 FINAL 则返回 true，否则返回 false。

本函数在 Qt 4.6 中被引入。

bool QMetaProperty::isFlagType() const

若该属性是标志位则返回 true，否则返回 false。

标志位可以通过或运算合并多个值。标志位通常也是枚举类型。

\begin{seeAlso}
isEnumType()，enumerator() 和 QMetaEnum::isFlag()。
\end{seeAlso}

bool QMetaProperty::isReadable() const

若该属性可被读取则返回 true，否则返回 false。

\begin{seeAlso}
isWritable()，read() 和 isValid()。
\end{seeAlso}

bool QMetaProperty::isRequired() const

若该属性在 Q\_PROPERTY() 中被标记为 REQUIRED 则返回 true，否则返回 false。

本函数在 Qt 5.15 中被引入。

bool QMetaProperty::isResettable() const

若该属性可被重置为默认值则返回 true，否则返回 false。

\begin{seeAlso}
reset()。
\end{seeAlso}

bool QMetaProperty::isScriptable(const QObject \emph{*object} = nullptr) const

若该属性可被脚本化则返回 true，否则返回 false。

若 object 未被指定，则当 Q\_PROPERTY() 的 SCRIPTABLE 标记被指定为 false时，此函数返回 false ；
其它情况下返回 true（若该标记被指定为 true，或指定为某个函数，或指定为表达式）。

\begin{seeAlso}
isDesignable() 和 isStored()。
\end{seeAlso}

bool QMetaProperty::isStored(const QObject *object = nullptr) const

若该属性可存储则返回 true，否则返回 false。

若 object 未被指定，则当 Q\_PROPERTY() 的 STORED 标记被指定为 false时，此函数返回 false ；其它情况下返回 true（若该标记被指定为 true，或指定为某个函数，或指定为表达式）。

\begin{seeAlso}
isDesignable() 和 isScriptable()。
\end{seeAlso}

bool QMetaProperty::isUser(const QObject *object = nullptr) const

若该属性被设计为 USER 性质则返回 true，即可以在 object 中被用户编辑，或在某些方面很重要；其它情况下返回 false。例如，QLineEdit 的 text 属性是 USER 可编辑的。

若 object 是 nullptr，则当 Q\_PROPERTY() 的 STORED 标记被指定为 false时，此函数返回 false ；
其它情况下返回 true。

\begin{seeAlso}
QMetaObject::userProperty()，isDesignable() 和 isScriptable()。
\end{seeAlso}

bool QMetaProperty::isValid() const

若该属性是有效的（可读）则返回 true，否则返回 false。

\begin{seeAlso}
isReadable()。
\end{seeAlso}

bool QMetaProperty::isWritable() const

若该属性可被写入则返回 true，否则返回 false。

\begin{seeAlso}
isReadable() 和 write()。
\end{seeAlso}

const char *QMetaProperty::name() const

返回本属性的名称。

\begin{seeAlso}
type() 和 typeName()。
\end{seeAlso}

QMetaMethod QMetaProperty::notifySignal() const

若已为本属性指定数值修改时发送的通知信号，则返回该通知信号对应的 QMetaMethod 实例，否则返回无效的 QMetaMethod 对象。

本函数在 Qt 4.5 中被引入。

\begin{seeAlso}
hasNotifySignal()。
\end{seeAlso}

int QMetaProperty::notifySignalIndex() const

若已为本属性指定数值修改时发送的通知信号，则返回该通知信号的索引编号，否则返回 -1。

本函数在 Qt 4.6 中被引入。

\begin{seeAlso}
hasNotifySignal()。
\end{seeAlso}

int QMetaProperty::propertyIndex() const

返回本属性的索引编号。

本函数在 Qt 4.6 中被引入。

QVariant QMetaProperty::read(const QObject *object) const

读取给定的 object 中的本属性，若可以读取则返回属性值，否则返回无效的 QVariant。

\begin{seeAlso}
write()，reset() 和 isReadable()。
\end{seeAlso}

QVariant QMetaProperty::readOnGadget(const void *gadget) const

读取给定的 gadget 中的本属性，若可以读取则返回属性值，否则返回无效的 QVariant。

当且仅当本属性是 Q\_GADGET 中的属性时，才可使用此函数。

本函数在 Qt 5.5 中被引入。

int QMetaProperty::relativePropertyIndex() const

返回本属性在对应的元对象中的相对索引编号。

本函数在 Qt 5.14 中被引入。

bool QMetaProperty::reset(QObject *object) const

通过重置方法重置给定的 object 中的本属性。若重置成功则返回 true，否则返回 false。

重置方法是可选的，只有少量属性支持重置。

\begin{seeAlso}
read() 和 write()。
\end{seeAlso}

bool QMetaProperty::resetOnGadget(void *gadget) const

通过重置方法重置给定的 gadget 中的本属性。若重置成功则返回 true，否则返回 false。

重置方法是可选的，只有少量属性支持重置。

当且仅当本属性是 Q\_GADGET 中的属性时，才可使用此函数。

本函数在 Qt 5.5 中被引入。

int QMetaProperty::revision() const

若该属性被 REVISION 标记，则返回对应的版本，否则返回 0。

本函数在 Qt 5.1 中被引入。

QVariant::Type QMetaProperty::type() const

返回本属性的类型。返回值是 QVariant::Type 的枚举值之。

\begin{seeAlso}
userType()，typeName() 和 name()。
\end{seeAlso}

const char *QMetaProperty::typeName() const

返回本属性的类型名称。

\begin{seeAlso}
type() 和 name()。
\end{seeAlso}

int QMetaProperty::userType() const

返回本属性的用户类型。返回值是 QMetaType 中注册的类型之一，若该类型未被注册则返回 QMetaType::UnknownType。

本函数在 Qt 4.2 中被引入。

\begin{seeAlso}
type()，QMetaType 和 typeName()。
\end{seeAlso}

bool QMetaProperty::write(QObject \emph{*object}, const QVariant \emph{\&value}) const

将 value 写入到给定的 object 的本属性中，若写入成功则返回 true，否则返回 false。

若 value 与本属性类型不一致，则会尝试进行自动转换。若本属性是可重置的，则传入空的 QVariant() 等价于调用 reset()，否则等价于设置为默认值。

\begin{seeAlso}
read()，reset() 和 isWritable()。
\end{seeAlso}

bool QMetaProperty::writeOnGadget(void \emph{*gadget}, const QVariant \emph{\&value}) const

将 value 写入到给定的 gadget 的本属性中，若写入成功则返回 true，否则返回 false。

当且仅当本属性是 Q\_GADGET 中的属性时，才可使用此函数。

本函数在 Qt 5.5 中被引入。